home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / Widgets / MenuWidget.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-11-16  |  42.5 KB  |  1,150 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import BUIx
  5. import Bladex
  6. import Raster
  7. import ScorerWidgets
  8. import WidgetsExtra
  9. import SpinWidget
  10. import TextFXWidget
  11. import pdb
  12. import BInput
  13. import BBLib
  14. import MenuText
  15. import sys
  16. import netgame
  17.  
  18. class Stack:
  19.     
  20.     def __init__(self):
  21.         self.Items = []
  22.  
  23.     
  24.     def __del__(self):
  25.         pass
  26.  
  27.     
  28.     def nItems(self):
  29.         return len(self.Items)
  30.  
  31.     
  32.     def Push(self, item):
  33.         self.Items.append(item)
  34.  
  35.     
  36.     def Pop(self):
  37.         self.Items = self.Items[:-1]
  38.  
  39.     
  40.     def Top(self):
  41.         
  42.         try:
  43.             return self.Items[-1]
  44.         except:
  45.             return None
  46.  
  47.  
  48.     
  49.     def Reset(self):
  50.         self.Items = []
  51.  
  52.  
  53.  
  54. class MenuStack(Stack):
  55.     
  56.     def __init__(self, final_callback):
  57.         Stack.__init__(self)
  58.         self.FinalCallBack = final_callback
  59.  
  60.     
  61.     def Push(self, menu_item):
  62.         s = self.Top()
  63.         if not s:
  64.             Bladex.SetAppMode('Menu')
  65.         
  66.         Bladex.SetRootWidget(menu_item.GetPointer())
  67.         Stack.Push(self, menu_item)
  68.  
  69.     
  70.     def Pop(self):
  71.         Stack.Pop(self)
  72.         s = self.Top()
  73.         if s:
  74.             Bladex.SetRootWidget(s.GetPointer())
  75.         else:
  76.             self.FinalCallBack()
  77.  
  78.  
  79.  
  80. class B_MenuFocusManager:
  81.     
  82.     def __init__(self):
  83.         self.MenuItems = []
  84.         self.Focus = None
  85.  
  86.     
  87.     def __del__(self):
  88.         self.Focus = None
  89.         self.MenuItems = []
  90.  
  91.     
  92.     def AddMenuElement(self, menu_element):
  93.         self.MenuItems.append(menu_element)
  94.         self.Focus = menu_element
  95.  
  96.     
  97.     def GetFocus(self):
  98.         return self.Focus
  99.  
  100.     
  101.     def SetFocus(self, menu_element):
  102.         accepts_focus = 0
  103.         
  104.         try:
  105.             accepts_focus = menu_element.AcceptsFocus()
  106.         except:
  107.             pass
  108.  
  109.         if accepts_focus == 1:
  110.             old_foc = self.GetFocus()
  111.             if menu_element == old_foc:
  112.                 return 1
  113.             
  114.             if old_foc:
  115.                 old_foc.SetHasFocus(0)
  116.             
  117.             menu_element.SetHasFocus(1)
  118.             self.Focus = menu_element
  119.             return 1
  120.         
  121.         return 0
  122.  
  123.     
  124.     def SetFocus_Idx(self, menu_element_idx):
  125.         
  126.         try:
  127.             menu_element = self.MenuItems[menu_element_idx]
  128.             self.SetFocus(menu_element)
  129.         except:
  130.             print 'Error setting focus to index', menu_element_idx
  131.  
  132.  
  133.     
  134.     def NextFocus(self):
  135.         
  136.         try:
  137.             old_focus = self.GetFocus()
  138.             index = self.MenuItems.index(old_focus)
  139.             list = self.MenuItems[index + 1:] + self.MenuItems[:index]
  140.             for i in list:
  141.                 pass
  142.         except:
  143.             print 'B_MenuFocusManager::NextFocus() -> Exception ocurred.'
  144.  
  145.  
  146.     
  147.     def PrevFocus(self):
  148.         
  149.         try:
  150.             old_focus = self.GetFocus()
  151.             index = self.MenuItems.index(old_focus)
  152.             l1 = self.MenuItems[:index]
  153.             l2 = self.MenuItems[index + 1:]
  154.             l1.reverse()
  155.             l2.reverse()
  156.             list = l1 + l2
  157.             for i in list:
  158.                 pass
  159.         except:
  160.             print 'B_MenuFocusManager::PrevFocus() -> Exception ocurred.'
  161.  
  162.  
  163.     
  164.     def FinalRelease(self):
  165.         for i in self.MenuItems:
  166.             
  167.             try:
  168.                 i.FinalRelease()
  169.             except:
  170.                 0
  171.                 self.MenuItems
  172.  
  173.         
  174.  
  175.  
  176.  
  177. class B_MenuFrameWidget(B_MenuFocusManager, BUIx.B_FrameWidget):
  178.     
  179.     def __init__(self, Parent, Name, Width, Height, VertPos = 0):
  180.         BUIx.B_FrameWidget.__init__(self, Parent, Name, Width, Height)
  181.         B_MenuFocusManager.__init__(self)
  182.         self.VertPos = VertPos
  183.         self.thisown = 1
  184.         self.SetAutoScale(1)
  185.  
  186.     
  187.     def __del__(self):
  188.         for i in self.MenuItems:
  189.             i.SetDrawFunc(None)
  190.         
  191.         B_MenuFocusManager.__del__(self)
  192.         BUIx.B_FrameWidget.__del__(self)
  193.  
  194.     
  195.     def AddMenuElement(self, menu_element, sep = 0, HPos = 0.5, HIndicator = BUIx.B_FrameWidget.B_FR_HRelative, HAnchor = BUIx.B_FrameWidget.B_FR_HCenter):
  196.         B_MenuFocusManager.AddMenuElement(self, menu_element)
  197.         self.AddWidget(menu_element, HPos, self.VertPos + sep, HIndicator, HAnchor, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  198.         self.VertPos = self.VertPos + menu_element.GetSize()[1] + sep
  199.         self.SetFocus(menu_element.Name())
  200.  
  201.     
  202.     def AddMenuElementEx(self, menu_element, VPos = 0, HPos = 0.5, HIndicator = BUIx.B_FrameWidget.B_FR_HRelative, HAnchor = BUIx.B_FrameWidget.B_FR_HCenter):
  203.         B_MenuFocusManager.AddMenuElement(self, menu_element)
  204.         self.AddWidget(menu_element, HPos, self.VertPos + sep, HIndicator, HAnchor, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  205.         self.VertPos = self.VertPos + menu_element.GetSize()[1] + sep
  206.         self.SetFocus(menu_element.Name())
  207.  
  208.  
  209.  
  210. class B_MenuTreeItem:
  211.     
  212.     def __init__(self, MenuDescr, StackMenu):
  213.         self.SetAlpha(0.5)
  214.         self.StackMenu = StackMenu
  215.         self.MenuDescr = MenuDescr
  216.         
  217.         try:
  218.             self.FocusCallBack = MenuDescr['FocusCallBack']
  219.         except:
  220.             pass
  221.  
  222.  
  223.     
  224.     def __del__(self):
  225.         pass
  226.  
  227.     
  228.     def __str__(self):
  229.         print 'B_MenuTreeItem widget with descriptor', self.MenuDescr
  230.  
  231.     
  232.     def ActivateItem(self, activate):
  233.         if activate == 1:
  234.             NewFrame = self.CreateFrame()
  235.             if NewFrame:
  236.                 self.StackMenu.Push(NewFrame)
  237.                 return 1
  238.             else:
  239.                 
  240.                 try:
  241.                     command = self.MenuDescr['Command']
  242.                     command(self)
  243.                     return 1
  244.                 except:
  245.                     return 0
  246.  
  247.         elif activate == 0:
  248.             w = self.StackMenu.Top()
  249.             
  250.             try:
  251.                 w.FinalRelease()
  252.             except:
  253.                 pass
  254.  
  255.             self.StackMenu.Pop()
  256.         
  257.  
  258.     
  259.     def CreateFrame(self):
  260.         frame_class = None
  261.         
  262.         try:
  263.             frame_class = self.MenuDescr['FrameKind']
  264.         except KeyError:
  265.             frame_class = B_MenuTree
  266.             l_dscr = []
  267.             
  268.             try:
  269.                 l_dscr = self.MenuDescr['ListDescr']
  270.             except KeyError:
  271.                 pass
  272.  
  273.             if l_dscr == []:
  274.                 print 'l_dscr==[]'
  275.                 return None
  276.             
  277.         except:
  278.             l_dscr == []
  279.  
  280.         
  281.         try:
  282.             NewFrame = frame_class(self, self.MenuDescr, self.StackMenu)
  283.             return NewFrame
  284.         except:
  285.             print 'Error Creating frame of class', frame_class
  286.  
  287.  
  288.  
  289.  
  290. class B_MenuTree(B_MenuFrameWidget):
  291.     
  292.     def __init__(self, Parent, Menudesc, StackMenu, VertPos = 0):
  293.         (Width, Height) = Raster.GetSize()
  294.         
  295.         try:
  296.             (Width, Height) = Menudesc['Size']
  297.         except KeyError:
  298.             pass
  299.  
  300.         B_MenuFrameWidget.__init__(self, Parent, 'MenuTree' + Menudesc['Name'], Width, Height, VertPos)
  301.         self.Menudesc = Menudesc
  302.         ValidIndex = 0
  303.         isValidIndex = 0
  304.         for i in Menudesc['ListDescr']:
  305.             m_class = B_MenuItemTextNoFX
  306.             
  307.             try:
  308.                 m_class = i['Kind']
  309.             except KeyError:
  310.                 0
  311.                 0
  312.                 Menudesc['ListDescr']
  313.             except:
  314.                 0
  315.  
  316.             vsep = 0
  317.             
  318.             try:
  319.                 vsep = i['VSep']
  320.             except KeyError:
  321.                 0
  322.                 0
  323.                 Menudesc['ListDescr']
  324.             except:
  325.                 0
  326.  
  327.             wSubMenu = m_class(self, i, StackMenu)
  328.             if not isValidIndex:
  329.                 if wSubMenu.AcceptsFocus():
  330.                     isValidIndex = 1
  331.                 else:
  332.                     ValidIndex = ValidIndex + 1
  333.             
  334.             HPos = 0.5
  335.             HIndicator = BUIx.B_FrameWidget.B_FR_HRelative
  336.             HAnchor = BUIx.B_FrameWidget.B_FR_HCenter
  337.             
  338.             try:
  339.                 PosDscr = i['Position']
  340.                 HPos = PosDscr[0]
  341.                 HIndicator = PosDscr[1]
  342.                 HAnchor = PosDscr[2]
  343.             except KeyError:
  344.                 pass
  345.  
  346.             
  347.             try:
  348.                 PosDscr = i['PositionEx']
  349.                 HPos = PosDscr[0]
  350.                 HIndicator = PosDscr[1]
  351.                 HAnchor = PosDscr[2]
  352.             except KeyError:
  353.                 B_MenuFrameWidget.AddMenuElement(self, wSubMenu, vsep, HPos, HIndicator, HAnchor)
  354.  
  355.         
  356.         if Menudesc.has_key('iFocus'):
  357.             self.SetFocus_Idx(Menudesc['iFocus'])
  358.         else:
  359.             self.SetFocus_Idx(ValidIndex)
  360.  
  361.     
  362.     def __del__(self):
  363.         B_MenuFrameWidget.__del__(self)
  364.  
  365.     
  366.     def __str__(self):
  367.         print 'B_MenuTree widget with Frame', self.Name()
  368.  
  369.  
  370.  
  371. class B_MenuSpin(SpinWidget.B_SpinWidget, B_MenuTreeItem):
  372.     
  373.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  374.         w = 220
  375.         h = 19
  376.         
  377.         try:
  378.             (w, h) = MenuDescr['Size']
  379.         except KeyError:
  380.             pass
  381.  
  382.         font = '..\\..\\Data\\Letras menu med.bmp'
  383.         
  384.         try:
  385.             font = MenuDescr['Font']
  386.         except KeyError:
  387.             pass
  388.  
  389.         SpinWidget.B_SpinWidget.__init__(self, Parent, MenuDescr['Name'], w, h, font_server, font)
  390.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  391.         
  392.         try:
  393.             val_func = MenuDescr['SpinGetValue']
  394.             val = val_func()
  395.             SpinWidget.B_SpinWidget.SetValue(self, val)
  396.         except KeyError:
  397.             pass
  398.  
  399.         
  400.         try:
  401.             (l, u, s) = MenuDescr['SpinValues']
  402.             SpinWidget.B_SpinWidget.SetLimits(self, l, u)
  403.             SpinWidget.B_SpinWidget.SetSteps(self, s)
  404.         except KeyError:
  405.             pass
  406.  
  407.         
  408.         try:
  409.             self.SetValueEnd = MenuDescr['SpinSetValueEnd']
  410.         except KeyError:
  411.             self.SetValueEnd = None
  412.  
  413.         if MenuDescr.has_key('SpinOnChange'):
  414.             self.SpinOnChange = MenuDescr['SpinOnChange']
  415.         else:
  416.             self.SpinOnChange = None
  417.  
  418.     
  419.     def IncMenuItem(self):
  420.         self.IncrementValue()
  421.         if self.SpinOnChange:
  422.             self.SpinOnChange(self.GetValue())
  423.         
  424.  
  425.     
  426.     def DecMenuItem(self):
  427.         self.DecrementValue()
  428.         if self.SpinOnChange:
  429.             self.SpinOnChange(self.GetValue())
  430.         
  431.  
  432.     
  433.     def FinalRelease(self):
  434.         if self.SetValueEnd is not None:
  435.             self.SetValueEnd(self.GetValue())
  436.         
  437.  
  438.  
  439.  
  440. class B_MenuItemTextNoFX(BUIx.B_TextWidget, B_MenuTreeItem):
  441.     
  442.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  443.         font = '..\\..\\Data\\Letras menu med.bmp'
  444.         
  445.         try:
  446.             font = MenuDescr['Font']
  447.         except KeyError:
  448.             pass
  449.  
  450.         BUIx.B_TextWidget.__init__(self, Parent, 'SubMenu' + MenuDescr['Name'], MenuDescr['Name'], font_server, font)
  451.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  452.         self.SetDrawFunc(self.Draw)
  453.         self.SetAlpha(1.0)
  454.         self.thisown = 1
  455.  
  456.     
  457.     def __del__(self):
  458.         pass
  459.  
  460.     
  461.     def __str__(self):
  462.         print 'B_MenuItemTextNoFX widget with text', self.GetTextData()
  463.  
  464.     
  465.     def Draw(self, x, y, time):
  466.         if self.GetVisible() == 0:
  467.             return None
  468.         
  469.         foc = self.GetHasFocus()
  470.         if foc:
  471.             self.SetColor(252, 247, 167)
  472.         else:
  473.             self.SetColor(207, 144, 49)
  474.         self.DefDraw(x, y, time)
  475.  
  476.  
  477.  
  478. class B_MenuItemTextNoFXNoFocus(BUIx.B_TextWidget, B_MenuTreeItem):
  479.     
  480.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  481.         font = '..\\..\\Data\\Letras menu med.bmp'
  482.         
  483.         try:
  484.             font = MenuDescr['Font']
  485.         except KeyError:
  486.             pass
  487.  
  488.         BUIx.B_TextWidget.__init__(self, Parent, 'SubMenu' + MenuDescr['Name'], MenuDescr['Name'], font_server, font)
  489.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  490.         self.SetDrawFunc(self.Draw)
  491.         self.SetAlpha(1.0)
  492.         self.thisown = 1
  493.  
  494.     
  495.     def __del__(self):
  496.         pass
  497.  
  498.     
  499.     def __str__(self):
  500.         print 'B_MenuItemTextNoFX widget with text', self.GetTextData()
  501.  
  502.     
  503.     def Draw(self, x, y, time):
  504.         if self.GetVisible() == 0:
  505.             return None
  506.         
  507.         foc = self.GetHasFocus()
  508.         if foc:
  509.             self.SetColor(252, 247, 167)
  510.         else:
  511.             self.SetColor(207, 144, 49)
  512.         self.SetAlpha(0.4)
  513.         self.DefDraw(x, y, time)
  514.         self.SetAlpha(1.0)
  515.  
  516.     
  517.     def AcceptsFocus(self):
  518.         return 0
  519.  
  520.  
  521.  
  522. class B_MenuItemText(TextFXWidget.B_TextFXWidget, B_MenuTreeItem):
  523.     
  524.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  525.         font = '..\\..\\Data\\Letras menu med.bmp'
  526.         
  527.         try:
  528.             font = MenuDescr['Font']
  529.         except KeyError:
  530.             pass
  531.  
  532.         TextFXWidget.B_TextFXWidget.__init__(self, Parent, 'SubMenu' + MenuDescr['Name'], MenuDescr['Name'], font_server, font)
  533.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  534.  
  535.     
  536.     def __del__(self):
  537.         TextFXWidget.B_TextFXWidget.__del__(self)
  538.         B_MenuTreeItem.__del__(self)
  539.  
  540.     
  541.     def __str__(self):
  542.         print 'B_MenuItemText widget with text', self.GetTextData()
  543.  
  544.  
  545.  
  546. class B_MenuItemTextNoFocus(B_MenuItemText):
  547.     
  548.     def AcceptsFocus(self):
  549.         return 0
  550.  
  551.  
  552.  
  553. class B_MenuItemOption(B_MenuItemTextNoFX):
  554.     
  555.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  556.         self.Options = [
  557.             'No option defined.']
  558.         self.SelOption = 0
  559.         self.OptionText = MenuDescr['Name']
  560.         
  561.         try:
  562.             self.Options = MenuDescr['Options']
  563.         except KeyError:
  564.             pass
  565.  
  566.         
  567.         try:
  568.             GetSelFunc = MenuDescr['SelOptionFunc']
  569.             OptionSel = GetSelFunc()
  570.             self.SelOption = OptionSel
  571.             print self.SelOption
  572.         except KeyError:
  573.             pass
  574.  
  575.         B_MenuItemTextNoFX.__init__(self, Parent, MenuDescr, StackMenu)
  576.         self.Parent = Parent
  577.         OptionText = self.OptionText + '    ' + str(self.Options[self.SelOption])
  578.         self.SetText(OptionText)
  579.  
  580.     
  581.     def __del__(self):
  582.         pass
  583.  
  584.     
  585.     def ActivateItem(self, activate):
  586.         check_pass = None
  587.         val = 1
  588.         if self.MenuDescr.has_key('CheckPass'):
  589.             check_pass = self.MenuDescr['CheckPass']
  590.             val = check_pass()
  591.         
  592.         if activate == 1 and val == 1:
  593.             self.SelOption = self.SelOption + 1
  594.             self.SelOption = self.SelOption % len(self.Options)
  595.             OptionText = self.OptionText + '    ' + self.Options[self.SelOption]
  596.             self.SetText(OptionText)
  597.             
  598.             try:
  599.                 self.Parent.RecalcLayout()
  600.             except:
  601.                 pass
  602.  
  603.             
  604.             try:
  605.                 command = self.MenuDescr['Command']
  606.                 command(MenuText.GetInverseMenuText(self.Options[self.SelOption]))
  607.             except KeyError:
  608.                 pass
  609.  
  610.         elif activate == 0:
  611.             self.StackMenu.Pop()
  612.         
  613.  
  614.     
  615.     def FinalRelease(self):
  616.         print 'B_MenuItemOption.FinalRelease()'
  617.         self.Parent = None
  618.  
  619.     
  620.     def IncMenuItem(self):
  621.         self.ActivateItem(1)
  622.  
  623.     
  624.     def DecMenuItem(self):
  625.         check_pass = None
  626.         val = 1
  627.         if self.MenuDescr.has_key('CheckPass'):
  628.             check_pass = self.MenuDescr['CheckPass']
  629.             val = check_pass()
  630.         
  631.         if val == 1:
  632.             self.SelOption = self.SelOption + len(self.Options) - 1
  633.             self.SelOption = self.SelOption % len(self.Options)
  634.             OptionText = self.OptionText + '    ' + self.Options[self.SelOption]
  635.             self.SetText(OptionText)
  636.             
  637.             try:
  638.                 self.Parent.RecalcLayout()
  639.             except:
  640.                 pass
  641.  
  642.             
  643.             try:
  644.                 command = self.MenuDescr['Command']
  645.                 command(MenuText.GetInverseMenuText(self.Options[self.SelOption]))
  646.             except KeyError:
  647.                 pass
  648.  
  649.         
  650.  
  651.  
  652.  
  653. class B_MenuItemPage(B_MenuFrameWidget):
  654.     
  655.     def __init__(self, Parent, PageDscr, MenuDescr, StackMenu):
  656.         self.TitleText = PageDscr['Title']
  657.         B_MenuFrameWidget.__init__(self, Parent, 'MenuItemPage ' + self.TitleText)
  658.         font = '..\\..\\Data\\Letras menu peq.bmp'
  659.         font_server = ScorerWidgets.font_server
  660.         self.BackgroundImage = None
  661.         
  662.         try:
  663.             self.BackgroundImage = PageDscr['Background']
  664.         except KeyError:
  665.             pass
  666.  
  667.         self.PrevLabel = 'Prev'
  668.         
  669.         try:
  670.             self.PrevLabel = PageDscr['PrevLabel']
  671.         except KeyError:
  672.             pass
  673.  
  674.         self.Title = BUIx.B_TextWidget(self, 'Title MenuItemPage ' + self.TitleText, self.TitleText, font_server, '..\\..\\Data\\Letras menu gra.bmp')
  675.         self.Title.SetAlpha(0.8)
  676.         self.Title.SetColor(252, 247, 167)
  677.         self.AddWidget(self.Title, 10, 10, BUIx.B_FrameWidget.B_FR_AbsoluteRight, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  678.         
  679.         try:
  680.             font = PageDscr['Font']
  681.             MenuDescr['Font'] = font
  682.         except KeyError:
  683.             pass
  684.  
  685.         self.PrevItem = B_MenuItemText(self, self.TitleText + self.PrevLabel, self.PrevLabel, None, StackMenu)
  686.         self.PrevItem.SetAlpha(1.0)
  687.         self.PrevItem.SetColor(252, 247, 167)
  688.         B_MenuFocusManager.AddMenuElement(self, self.PrevItem)
  689.         self.AddWidget(self.PrevItem, 10, 10, BUIx.B_FrameWidget.B_FR_AbsoluteLeft, BUIx.B_FrameWidget.B_FR_Left, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  690.         self.NextLabel = 'Next'
  691.         
  692.         try:
  693.             self.NextLabel = PageDscr['NextLabel']
  694.         except KeyError:
  695.             pass
  696.  
  697.         self.NextItem = B_MenuItemText(self, self.TitleText + self.NextLabel, self.NextLabel, None, StackMenu)
  698.         self.NextItem.SetAlpha(1.0)
  699.         self.NextItem.SetColor(252, 247, 167)
  700.         B_MenuFocusManager.AddMenuElement(self, self.NextItem)
  701.         self.AddWidget(self.NextItem, 10, 10, BUIx.B_FrameWidget.B_FR_AbsoluteRight, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  702.         self.ContinueItem = B_MenuItemText(self, self.TitleText + ' Continue', 'Continue', None, StackMenu)
  703.         self.ContinueItem.SetAlpha(1.0)
  704.         self.ContinueItem.SetColor(252, 247, 167)
  705.         B_MenuFocusManager.AddMenuElement(self, self.ContinueItem)
  706.         self.AddWidget(self.ContinueItem, 0.4, 10, BUIx.B_FrameWidget.B_FR_HRelative, BUIx.B_FrameWidget.B_FR_Left, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  707.         self.BackItem = B_MenuItemText(self, self.TitleText + ' Back', 'Back', None, StackMenu)
  708.         self.BackItem.SetAlpha(0.5)
  709.         self.BackItem.SetColor(252, 247, 167)
  710.         B_MenuFocusManager.AddMenuElement(self, self.BackItem)
  711.         self.AddWidget(self.BackItem, 0.4, 10, BUIx.B_FrameWidget.B_FR_HRelative, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  712.         self.Description = 'No Description'
  713.         
  714.         try:
  715.             self.Description = PageDscr['Description']
  716.         except KeyError:
  717.             pass
  718.  
  719.         self.DescriptionItem = B_MenuItemTextNoFocus(self, self.TitleText + ' Description', self.Description, None, StackMenu)
  720.         B_MenuFocusManager.AddMenuElement(self, self.DescriptionItem)
  721.         self.DescriptionItem.SetAlpha(1.0)
  722.         self.DescriptionItem.SetColor(252, 247, 167)
  723.         self.AddWidget(self.DescriptionItem, 25, 0.7, BUIx.B_FrameWidget.B_FR_AbsoluteRight, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_VRelative, BUIx.B_FrameWidget.B_FR_VCenter)
  724.         
  725.         try:
  726.             BackgroundImage = PageDscr['BackGround']
  727.             self.BackgroundItem = WidgetsExtra.B_ImageWidget(self, self.TitleText + ' Background', BackgroundImage)
  728.             self.AddWidget(self.BackgroundItem, 0.5, 0.5, BUIx.B_FrameWidget.B_FR_HRelative, BUIx.B_FrameWidget.B_FR_HCenter, BUIx.B_FrameWidget.B_FR_VRelative, BUIx.B_FrameWidget.B_FR_VCenter)
  729.         except KeyError:
  730.             pass
  731.  
  732.         B_MenuFocusManager.SetFocus(self, self.ContinueItem)
  733.  
  734.     
  735.     def __del__(self):
  736.         pass
  737.  
  738.     
  739.     def __str__(self):
  740.         print 'B_MenuItemPage', self.TitleText
  741.  
  742.     
  743.     def SetVisible(self, v):
  744.         B_MenuFrameWidget.SetVisible(self, v)
  745.  
  746.  
  747.  
  748. class B_MenuItemPages(BUIx.B_TextWidget, B_MenuTreeItem):
  749.     
  750.     def __init__(self, Parent, MenuDescr, StackMenu):
  751.         font = '..\\..\\Data\\Letras menu med.bmp'
  752.         font_server = ScorerWidgets.font_server
  753.         BUIx.B_TextWidget.__init__(self, Parent, 'B_MenuItemPages', 'B_MenuItemPages Text', font_server, font)
  754.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  755.         self.Pages = []
  756.         self.ActivePage = None
  757.         self.SetDrawFunc(self.Draw)
  758.         self.SetSizeChangedFunc(self.SizeChanged)
  759.         PageDscrs = MenuDescr['PageDscrs']
  760.         for i in PageDscrs:
  761.             self.AddPage(Parent, i, MenuDescr, StackMenu)
  762.         
  763.         self.SetActivePage(self.Pages[0])
  764.         self.thisown = 1
  765.  
  766.     
  767.     def __del__(self):
  768.         print 'Deleting', self
  769.  
  770.     
  771.     def AddPage(self, Parent, pagedscr, MenuDescr, StackMenu):
  772.         page = B_MenuItemPage(Parent, 640, 480, pagedscr, MenuDescr, StackMenu)
  773.         self.Pages.append(page)
  774.  
  775.     
  776.     def SetActivePage(self, page):
  777.         if self.ActivePage:
  778.             self.ActivePage.SetVisible(0)
  779.         
  780.         self.ActivePage = page
  781.         if self.ActivePage:
  782.             self.ActivePage.SetVisible(1)
  783.             Bladex.SetRootWidget(self.ActivePage.GetPointer())
  784.         
  785.  
  786.     
  787.     def NextPageAux(self, desp):
  788.         old_page = self.ActivePage
  789.         index = self.Pages.index(old_page)
  790.         index = index + desp
  791.         index = index % len(self.Pages)
  792.         self.SetActivePage(self.Pages[index])
  793.  
  794.     
  795.     def NextPage(self):
  796.         self.NextPageAux(1)
  797.  
  798.     
  799.     def PrevPage(self):
  800.         self.NextPageAux(-1)
  801.  
  802.     
  803.     def GetPointer(self):
  804.         if self.ActivePage:
  805.             return self.ActivePage.GetPointer()
  806.         else:
  807.             return self.GetPointer()
  808.  
  809.     
  810.     def AcceptsFocus(self):
  811.         return 0
  812.  
  813.     
  814.     def GetFocus(self):
  815.         return self
  816.  
  817.     
  818.     def NextFocus(self):
  819.         if self.ActivePage:
  820.             self.ActivePage.NextFocus()
  821.         
  822.  
  823.     
  824.     def PrevFocus(self):
  825.         if self.ActivePage:
  826.             self.ActivePage.PrevFocus()
  827.         
  828.  
  829.     
  830.     def ActivateItem(self, act):
  831.         if act and self.ActivePage:
  832.             wTemp = self.ActivePage.GetFocus()
  833.             if not wTemp.ActivateItem(1):
  834.                 if self.ActivePage.GetFocus() == self.ActivePage.PrevItem:
  835.                     self.PrevPage()
  836.                 elif self.ActivePage.GetFocus() == self.ActivePage.NextItem:
  837.                     self.NextPage()
  838.                 
  839.             
  840.         else:
  841.             self.SetActivePage(None)
  842.             B_MenuTreeItem.ActivateItem(self, act)
  843.  
  844.     
  845.     def __str__(self):
  846.         print 'class B_MenuItemPages with', len(self.Pages), 'pages'
  847.  
  848.     
  849.     def Draw(self, x, y, time):
  850.         if self.ActivePage:
  851.             self.ActivePage.Draw(x, y, time)
  852.         else:
  853.             self.SetColor(100, 100, 240)
  854.             self.SetAlpha(0.5)
  855.             BUIx.B_TextWidget.DefDraw(self, 100, 100, time)
  856.  
  857.     
  858.     def SizeChanged(self, reshz, resvt):
  859.         for i in self.Pages:
  860.             i.SizeChanged(reshz, resvt)
  861.         
  862.  
  863.     
  864.     def CreateFrame(self):
  865.         return None
  866.  
  867.  
  868.  
  869. class B_BackImageWidget(BUIx.B_RectWidget):
  870.     
  871.     def __init__(self, Parent, MenuDescr, StackMenu):
  872.         self.Bitmap = BBLib.B_BitMap24()
  873.         self.Bitmap.ReadFromFile('..\\..\\Data\\menu.jpg')
  874.         self.vidw = 1
  875.         self.vidh = 1
  876.         BUIx.B_RectWidget.__init__(self, Parent, MenuDescr['Name'], self.vidw, self.vidh)
  877.         self.Selected = 0
  878.         self.Solid = 0
  879.         self.Border = 0
  880.         self.SetDrawFunc(self.Draw)
  881.  
  882.     
  883.     def Draw(self, x, y, time):
  884.         Raster.SetPosition(0, 0)
  885.         Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Bitmap.GetData())
  886.         self.DefDraw(x, y, time)
  887.  
  888.     
  889.     def FinalRelease(self):
  890.         BUIx.B_RectWidget.FinalRelease(self)
  891.  
  892.     
  893.     def AcceptsFocus(self):
  894.         return 0
  895.  
  896.  
  897.  
  898. class B_BackBlank(BUIx.B_RectWidget):
  899.     
  900.     def __init__(self, Parent, MenuDescr, StackMenu):
  901.         self.Bitmap = BBLib.B_BitMap24()
  902.         self.Bitmap.ReadFromFile('..\\..\\Data\\Black.jpg')
  903.         self.vidw = 1
  904.         self.vidh = 1
  905.         BUIx.B_RectWidget.__init__(self, Parent, MenuDescr['Name'], self.vidw, self.vidh)
  906.         self.Selected = 0
  907.         self.Solid = 0
  908.         self.Border = 0
  909.         self.SetDrawFunc(self.Draw)
  910.  
  911.     
  912.     def Draw(self, x, y, time):
  913.         Raster.SetPosition(0, 0)
  914.         Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Bitmap.GetData())
  915.         self.DefDraw(x, y, time)
  916.  
  917.     
  918.     def FinalRelease(self):
  919.         BUIx.B_RectWidget.FinalRelease(self)
  920.  
  921.     
  922.     def AcceptsFocus(self):
  923.         return 0
  924.  
  925.  
  926.  
  927. class B_BackWeapon(BUIx.B_RectWidget):
  928.     
  929.     def __init__(self, Parent, Menudesc, StackMenu, VertPos = 0):
  930.         import Language
  931.         char = Bladex.GetEntity('Player1')
  932.         print char.Kind
  933.         self.Specials = BBLib.B_BitMap24()
  934.         self.Specials.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\' + char.Kind + '\\plantillaspecials.jpg')
  935.         self.Items = BBLib.B_BitMap24()
  936.         self.Items.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\Items\\plantillaGitems.jpg')
  937.         self.Weapons = BBLib.B_BitMap24()
  938.         self.Weapons.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\' + char.Kind + '\\plantillaweapons.jpg')
  939.         self.Habilities = BBLib.B_BitMap24()
  940.         self.Habilities.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\' + char.Kind + '\\plantillahabilities.jpg')
  941.         self.MapText = BBLib.B_BitMap24()
  942.         self.MapText.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\' + char.Kind + '\\' + Bladex.GetCurrentMap() + '.jpg')
  943.         if self.MapText.GetData() == 0:
  944.             self.MapText.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\' + Bladex.GetCurrentMap() + '.jpg')
  945.         
  946.         self.Text1 = BBLib.B_BitMap24()
  947.         self.Text1.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\muralorc.jpg')
  948.         self.Text2 = BBLib.B_BitMap24()
  949.         self.Text2.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\muralisla1.jpg')
  950.         self.Text3 = BBLib.B_BitMap24()
  951.         self.Text3.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\muralnejev.jpg')
  952.         self.Tablets = BBLib.B_BitMap24()
  953.         self.Tablets.ReadFromFile('..\\..\\Data\\TB\\' + Language.Current + '\\tablillas.jpg')
  954.         self.image = 1
  955.         self.NumImages = 6
  956.         self.Text = 0
  957.         self.NumTexts = 4
  958.         self.TextsAvail = [
  959.             1,
  960.             0,
  961.             0,
  962.             0]
  963.         self.vidw = 1
  964.         self.vidh = 1
  965.         BUIx.B_RectWidget.__init__(self, Parent, Menudesc['Name'], self.vidw, self.vidh)
  966.         self.Selected = 0
  967.         self.Solid = 0
  968.         self.Border = 0
  969.         self.SetDrawFunc(self.Draw)
  970.         self.SndCorreGema = Bladex.CreateSound('..\\..\\Sounds\\golpe-2.wav', 'Chanje')
  971.         self.SndCorreGema.Volume = 0.5
  972.         self.SndCorreGema.MinDistance = 1000000.0
  973.         self.SndCorreGema.MaxDistance = 2000000
  974.  
  975.     
  976.     def Draw(self, x, y, time):
  977.         import string
  978.         import GotoMapVars
  979.         import Menu
  980.         (x, y) = Raster.GetSize()
  981.         Raster.SetPosition((x - 640) / 2, (y - 480) / 2)
  982.         if 'ORCMURAL' in GotoMapVars.BaList:
  983.             self.TextsAvail[1] = 1
  984.         
  985.         if 'ISLANDMURAL' in GotoMapVars.BaList:
  986.             self.TextsAvail[2] = 1
  987.         
  988.         if 'NEJEVMURAL' in GotoMapVars.BaList:
  989.             self.TextsAvail[3] = 1
  990.         
  991.         Inventory = Bladex.GetEntity('Player1').GetInventory()
  992.         addone = 0
  993.         if not (Inventory.nTablets > 0) and not (1 in GotoMapVars.PlacedTablets):
  994.             addone = 1
  995.         
  996.         if 'SALATABLILLAS' in GotoMapVars.BaList:
  997.             addone = 0
  998.         
  999.         Map = string.lower(Bladex.GetCurrentMap())
  1000.         Specials = 1
  1001.         if Map in GotoMapVars.BackLevelNames:
  1002.             Specials = 0
  1003.         elif GotoMapVars.LevelNames.index(Map) > 6:
  1004.             Specials = 0
  1005.         
  1006.         if self.image < Specials:
  1007.             self.image = self.NumImages - (1 + addone)
  1008.         
  1009.         if self.image > self.NumImages - (1 + addone):
  1010.             self.image = Specials
  1011.         
  1012.         if self.Text < 0:
  1013.             self.Text = self.NumTexts - 1
  1014.         
  1015.         if self.Text > self.NumTexts - 1:
  1016.             self.Text = 0
  1017.         
  1018.         if self.image == 0:
  1019.             Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Specials.GetData())
  1020.         
  1021.         if self.image == 1:
  1022.             Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Weapons.GetData())
  1023.         
  1024.         if self.image == 2:
  1025.             Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Habilities.GetData())
  1026.         
  1027.         if self.image == 3:
  1028.             Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Items.GetData())
  1029.         
  1030.         if self.image == 4:
  1031.             if self.Text == 0:
  1032.                 Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.MapText.GetData())
  1033.             
  1034.             if self.Text == 1:
  1035.                 Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Text1.GetData())
  1036.             
  1037.             if self.Text == 2:
  1038.                 Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Text2.GetData())
  1039.             
  1040.             if self.Text == 3:
  1041.                 Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Text3.GetData())
  1042.             
  1043.         
  1044.         if self.image == 5:
  1045.             Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Tablets.GetData())
  1046.         
  1047.         if self.image == 4 and self.TextsAvail[1] and self.TextsAvail[2] or self.TextsAvail[3]:
  1048.             Menu.TBUDSoundAble = 1
  1049.         else:
  1050.             Menu.TBUDSoundAble = 0
  1051.         self.DefDraw(x, y, time)
  1052.  
  1053.     
  1054.     def FinalRelease(self):
  1055.         BUIx.B_RectWidget.FinalRelease(self)
  1056.  
  1057.     
  1058.     def AcceptsFocus(self):
  1059.         return 1
  1060.  
  1061.     
  1062.     def IncMenuItem(self):
  1063.         self.SndCorreGema.PlayStereo()
  1064.         self.image = self.image + 1
  1065.  
  1066.     
  1067.     def DecMenuItem(self):
  1068.         self.SndCorreGema.PlayStereo()
  1069.         self.image = self.image - 1
  1070.  
  1071.     
  1072.     def GetFocus(self):
  1073.         return self
  1074.  
  1075.     
  1076.     def ActivateItem(self, activate):
  1077.         import Menu
  1078.         Menu.ActivateMenu()
  1079.         return None
  1080.  
  1081.     
  1082.     def NextFocus(self):
  1083.         if self.image == 4:
  1084.             self.Text = self.Text + 1
  1085.             while not self.TextsAvail[self.Text]:
  1086.                 self.Text = self.Text + 1
  1087.                 if self.Text > self.NumTexts - 1:
  1088.                     self.Text = 0
  1089.                 
  1090.         
  1091.  
  1092.     
  1093.     def PrevFocus(self):
  1094.         if self.image == 4:
  1095.             self.Text = self.Text - 1
  1096.             while not self.TextsAvail[self.Text]:
  1097.                 self.Text = self.Text - 1
  1098.                 if self.Text < 0:
  1099.                     self.Text = self.NumTexts - 1
  1100.                 
  1101.         
  1102.  
  1103.     
  1104.     def __del__(self):
  1105.         Menu.TBUDSoundAble = 1
  1106.  
  1107.  
  1108.  
  1109. class B_BackFeatures(BUIx.B_RectWidget):
  1110.     
  1111.     def __init__(self, Parent, MenuDescr, StackMenu):
  1112.         self.Bitmap1 = BBLib.B_BitMap24()
  1113.         self.Bitmap1.ReadFromFile('..\\..\\Data\\Blade_features1.jpg')
  1114.         self.Bitmap2 = BBLib.B_BitMap24()
  1115.         self.Bitmap2.ReadFromFile('..\\..\\Data\\Blade_features2.jpg')
  1116.         self.CurrentBitmap = BBLib.B_BitMap24()
  1117.         self.CurrentBitmap = self.Bitmap1
  1118.         self.vidw = 1
  1119.         self.vidh = 1
  1120.         BUIx.B_RectWidget.__init__(self, Parent, MenuDescr['Name'], self.vidw, self.vidh)
  1121.         self.Selected = 0
  1122.         self.Solid = 0
  1123.         self.Border = 0
  1124.         self.SetDrawFunc(self.Draw)
  1125.         self.Time2Exit = None
  1126.  
  1127.     
  1128.     def Draw(self, x, y, time):
  1129.         if self.Time2Exit == None:
  1130.             self.Time2Exit = time
  1131.         
  1132.         if time - self.Time2Exit > 10.0:
  1133.             Bladex.Quit()
  1134.         elif time - self.Time2Exit > 5.0:
  1135.             self.CurrentBitmap = self.Bitmap2
  1136.         
  1137.         Raster.SetPosition(0, 0)
  1138.         Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.CurrentBitmap.GetData())
  1139.         self.DefDraw(x, y, time)
  1140.  
  1141.     
  1142.     def FinalRelease(self):
  1143.         BUIx.B_RectWidget.FinalRelease(self)
  1144.  
  1145.     
  1146.     def AcceptsFocus(self):
  1147.         return 0
  1148.  
  1149.  
  1150.